import { Client } from 'discord.js';
import Portal from './portal.js';

interface BuildCommandOptions {
    dev?: boolean;
    exit?: boolean;
    files?: string[];
    force?: boolean;
    mode?: string;
    silent?: boolean;
    verbose?: boolean;
    watch?: boolean;
}

/**
 * Robo is the main entry point for your bot. It provides a simple API for starting, stopping, and restarting your Robo.
 *
 * ```ts
 * import { Robo } from 'robo.js'
 *
 * Robo.start()
 * ```
 *
 * You do not normally need to use this API directly, as the CLI will handle starting and stopping for you.
 *
 * [**Learn more:** Robo](https://robojs.dev/discord-bots/migrate)
 */
declare const Robo: {
    restart: typeof restart;
    start: typeof start;
    stop: typeof stop;
    build: typeof build;
};
declare let client: Client;
declare const portal: Portal;
interface StartOptions {
    client?: Client;
    shard?: string | boolean;
    stateLoad?: Promise<void>;
}
type BuildOptions = BuildCommandOptions;
/**
 * Builds your Robo instance. Similar to running `robo build` from the CLI.
 *
 * @param options - Options for building your Robo instance, similar to CLI options
 * @returns A promise that resolves when Robo has finished building
 */
declare function build(options?: BuildOptions): Promise<void>;
/**
 * Starts your Robo instance. Similar to running `robo start` from the CLI.
 *
 * @param options - Options for starting your Robo instance
 * @returns A promise that resolves when Robo has started
 */
declare function start(options?: StartOptions): Promise<void>;
/**
 * Stops your Robo instance gracefully. Similar to pressing `Ctrl+C` in the terminal.
 *
 * @param exitCode - The exit code to use when stopping Robo
 */
declare function stop(exitCode?: number): Promise<void>;
/**
 * Restarts your Robo instance gracefully. Similar to making changes with `robo dev` and restarting.
 *
 * @returns A promise that resolves when Robo has restarted
 */
declare function restart(): Promise<void>;

export { Robo, build, client, portal };
